package com.sxran.im.service;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.sxran.im.handler.*;

public enum CmdHandlerEnum {
    COMMAND_LOGIN_REQ(LoginCmdHandler.class,5),  // 登录
    COMMAND_CHAT_BEFORE_REQ(ChatBeforeCmdHandler.class,100000 + 11 ),  // 发消息之前
    COMMAND_CHAT_AFTER_REQ(ChatAfterCmdHandler.class,200000 + 11 ),  // 发消息之后
    COMMAND_CLOSE_REQ(CloseCmdHandler.class,-14), // 关闭连接的通知内容。
    COMMAND_GET_MESSAGE_REQ(GetMessageCmdHandler.class,19), // 获得用户所有的消息内容。
    COMMAND_GET_GROUP_INFO_REQ(GetGroupInfoCmdHandler.class,20), // 获取群组详细信息。
    COMMAND_GET_MESSAGE_LIST_REQ(GetMessageListCmdHandler.class,22), // 拉取指定会话的消息列表。
    COMMAND_GET_CONVERSATION_LIST_REQ(GetConversationListCmdHandler.class,23), // 获取会话列表的接口。
    COMMAND_SEARCH_USER_LIST_REQ(SearchUserListHandler.class,24), // 搜索用户列表的接口。
    COMMAND_SEARCH_GROUP_LIST_REQ(SearchGroupListHandler.class,25), // 搜索群组列表的接口。
    COMMAND_NOTIFICATION_AFTER_REQ(NotificationAfterCmdHandler.class,200000 + 26), // 发送通知消息之后。
    COMMAND_READ_NOTIFICATION_REQ(ReadNotificationCmdHandler.class, 27), // 消息已读处理。
    COMMAND_GET_NOTIFICATION_LIST_REQ(GetNotificationListCmdHandler.class, 28), // 获取通知列表消息。
    COMMAND_ADD_FRIEND_INVITE_REQ(AddFriendInviteCmdHandler.class,29), // 添加用户申请。
    COMMAND_ACCEPT_FRIEND_APPLICATION_REQ(AcceptFriendApplicationCmdHandler.class,30), //同意加用户申请。
    COMMAND_REFUSE_FRIEND_APPLICATION_REQ(RefuseFriendApplicationCmdHandler.class,31), // 拒绝用户申请。
    COMMAND_GENERATE_CONVERSATION_REQ(GenerateConversationCmdHandler.class,32), // 生成会话id请求。
    COMMAND_CLEAR_UNREAD_COUNT_REQ(ClearUnreadCountCmdHandler.class,33), // 已读会话请求。
    COMMAND_GET_FRIEND_LIST_REQ(GetFriendListCmdHandler.class,34), // 拉取 好友 的列表。
    COMMAND_GET_GROUP_LIST_REQ(GetGroupListCmdHandler.class,35), // 拉取 群组 的列表。
    COMMAND_ADD_GROUP_REQ(AddGroupInviteCmdHandler.class,36),  // 添加群组
    COMMAND_ACCEPT_GROUP_APPLICATION_REQ(AcceptGroupApplicationCmdHandler.class,37), // 同意群组申请请求
    COMMAND_REFUSE_GROUP_APPLICATION_REQ(RefuseGroupApplicationCmdHandler.class,38), // 拒绝群组申请请求
    COMMAND_CREATE_GROUP_REQ(CreateGroupCmdHandler.class,39), // 创建群聊请求请求
    COMMAND_DELETE_FRIEND_REQ(DeleteFriendCmdHandler.class,40), // 删除好友
    COMMAND_UPDATE_GROUP_INFO_REQ(UpdateGroupInfoCmdHandler.class,41), // 修改群组信息
    COMMAND_DISBAND_GROUP_REQ(DisBandGroupCmdHandler.class,42), // 解散群聊
    COMMAND_EXIT_GROUP_REQ(ExitGroupCmdHandler.class,43), // 退出群聊
    COMMAND_EXPORT_GROUP_REQ(ExportGroupCmdHandler.class,44), // 移出群聊请求
    COMMAND_DELETE_MESSAGE_REQ(DeleteMessageCmdHandler.class,45), // 删除消息
    COMMAND_REVOKE_MESSAGE_REQ(RevokeMessageCmdHandler.class,46), // 撤回消息
    COMMAND_WEBRTC_OFFER_REQ(WebrtcOfferCmdHandler.class,47), // WebRTC对offer的发送通知请求
    COMMAND_WEBRTC_ANSWER_REQ(WebrtcAnswerCmdHandler.class,48), // WebRTC对 answer 的发送通知请求
    COMMAND_GET_USER_REQ(UserInfoCmdHandler.class,17)  // 获得用户信息
    ;
    private final Class< ? extends CmdHandler> cmdHandler;
    private final int cmd;

    CmdHandlerEnum(Class< ? extends CmdHandler> cmdHandler, int cmd) {
        this.cmdHandler = cmdHandler;
        this.cmd = cmd;
    }

    public static CmdHandler getCmdHandler(int value) {
        for(CmdHandlerEnum command : CmdHandlerEnum.values()){
            if(command.cmd == value){
                return SpringUtil.getBean(StrUtil.lowerFirst(command.cmdHandler.getSimpleName()));
            }
        }
        return DefaultHandler.instance;
    }

    public Class<? extends CmdHandler> getCmdHandler() {
        return cmdHandler;
    }

    public int getCmd() {
        return cmd;
    }
}
